<?php

/**
 * Classe responsavel por todos os usuarios do sistema.
 * Cadastrar,excluir,visualizar,excluir  e primeiros passos.
 * @author Erick Haendel <erickhaendel.com>
 * @package app.Controller
 */
Class UsersController extends AppController{
	/**
	 * Definido com o nome do controller
	 * @var string
	 */
	public $name = 'Users';

    /**
     * Responsavel pela tela inical de acesso ao users.	
     * @return void 
     * @author Erick Haendel <erickhaendel@gmail.com>
     */
	public function index($user = null){
        $this->layout ='base';
        
        //Setando informações do usuario buscado pelo username.
		$this->set('user',$this->User->findByUsername($user));
	}
    
    public function following(){
        $id_follow = $this->request->data['id'];
        $this->User->saveFollowing($this->Auth->user('id'),$id_follow);
    }

	/**
	 * Cadastro do usuario, rebendo as informações da tela de inicial em forma de post.
	 * @author Erick Haendel <erickhaendel@gmail.com>
	 * @return void
	 */
    public function cadastre() {
    	$this->layout =  'login';
        if ($this->request->is('post')) {
            $this->User->create();
            if ($this->User->save($this->request->data)) {
            	if($this->Auth->login()){
                	$this->redirect(array('action' => 'starting'));
                }
            } else {
               
            }
        }
    }

    /**
     * Primeiros passos ao se cadastrar, completando informações adicionais.
     * @author Erick Haendel <erickhaendel@gmail.com>
     * @return void 
     */
    public function starting(){
    	$this->layout = 'starting';
        if($this->request->is('post')){
            $this->request->data['User']['id'] = $this->Auth->user()['id'];
            if($this->User->save($this->request->data)){
                $this->_refreshAuth();
                $this->redirect('startingstep2');
            };
        }
    }

    public function startingstep2(){
        $this->layout = 'starting';
        if($this->request->is('post')){
            $this->request->data['User']['id'] = $this->Auth->user()['id'];
            //Salvando a imagem no servidor e retornando o nome dela.
            $this->request->data['User']['photo'] =  $this->SaveImg( $this->request->data['User']['photo'],'users');

            if($this->User->save($this->request->data)){
                //Atualizando a sessão do usuario com as novas informações
                $this->_refreshAuth();
                $this->redirect('feed');
            };
        }
    }
    /* FIM dos primeiros passos*/

    public function feed(){
        $this->layout = 'feed';
    }

    /**
     * Editar informações do usuario.
     * @author Erick Haendel <erickhaendel@gmail.com>
     * @param  INT $id Identificador do usuario.
     * @return void
     */
    public function edit() {
        $this->layout = 'base';
        $id = $this->Auth->User('id');
        $this->User->id = $id;
        if (!$this->User->exists()) {
            throw new NotFoundException(__('Invalid user'));
        }
        if ($this->request->is('post') || $this->request->is('put')) {

            //Foto
            $this->request->data['User']['photo'] =  $this->SaveImg( $this->request->data['User']['photo'],'users');
            //Verificar se a foto foi mudada, se não foi mudada excluir a key da array.
            if(!$this->request->data['User']['photo']){
                unset($this->request->data['User']['photo']);
            }
            //Fim
            //Mudança de senha,verificar se a senha antiga é valida.
            // if(!$this->User->validPassword($this->Auth->User('id'),$this->request->data['User']['old'] )){
            //     //Se não for forvalida exclui do save
            //     $this->Session->setFlash(__('<span class="label label-warning">Senha antiga incorreta<span>'));
            //     $this->redirect($this->referer());
            // }
            // else {

            // }

            if ($this->User->save($this->request->data)) {
                $this->_refreshAuth();
                $this->redirect($this->referer());
            } else {
                 $this->redirect($this->referer());
            }
        } else {
            $this->request->data = $this->User->read(null, $id);
            unset($this->request->data['User']['password']);
        }
    }

    /**
     * Este método é executado antes de cada ação dos controllers. 
     * É para verificar se há uma sessão ativa ou inspecionar as permissões de um usuário.
     * @author Erick Haendel <erickhaendel@gmail.com>
     * @return void
     */
    public function beforeFilter() {
	    parent::beforeFilter();
	    $this->Auth->allow('cadastre','starting'); // Letting users register themselves
	}

	/**
	 * Responsavel por logar no sistema, ou informar um erro se o usuario não existir.
	 * @author Erick Haendel <erickhaendel@gmail.com>
	 * @return void
	 */
	public function login() {
        $this->layout =  'login';

        if ($this->request->is('post')) {

            $this->request->data['User']['username'] =$this->request->data['Login']['username'];
            $this->request->data['User']['password'] =$this->request->data['Login']['password'];
            unset($this->request->data['Login']['passwor']);
            unset($this->request->data['Login']['username']);
        
	        if ($this->Auth->login())	 {
	            $this->redirect(array('controller'=>'users','action'=>'feed'));
	        } else {
	            $this->redirect('/');
	        }
	    }
	}

	/**
	 * Responsavel por encerrar sessão no sistema.
	 * @author Erick Haendel <erickhaendel@gmail.com>
	 * @return void
	 */
	public function logout() {
	    $this->redirect($this->Auth->logout());
	}

    /**
    * Metodo para visualizar um usuario
    * @author Aldo Romero
    */
    public function view($id = null) {
        $this->User->id = $id;
        $this->set('user', $this->User->read());
    }

    /**
    * Metodo para excluir um usuario, esta faltando a verficacao da senha
    * @author Aldo Romero
    */
    public function delete($id, $password) {
        if($this->User->validaSenha($id, $password)) {
            $this->User->delete($id);
            $this->redirect(array('action' => 'logout'));
        }
	}
	

}